import { defineStore } from "pinia";
import { ref, computed } from "vue";
import AuthAPI from "@/api/auth";

/**
 * 用户状态管理 Store
 */
export const useUserStore = defineStore("user", () => {
  // token: 存储登录凭证
  const token = ref(uni.getStorageSync("token") || null);

  // userInfo: 存储用户信息（用户名、头像等）
  const userInfo = ref(JSON.parse(uni.getStorageSync("userInfo") || "null"));

  // isLoggedIn: 计算属性，判断用户是否已登录
  const isLoggedIn = computed(() => !!token.value && !!userInfo.value);

  /**
   * 设置登录状态
   * @param {Object} loginResult - 登录接口返回的数据
   */
  function setLoginState(loginResult) {
    token.value = loginResult.token || null;
    userInfo.value = {
      userName: loginResult.userName,
      avatar: loginResult.avatar,
    };
    // 将登录信息保存到本地缓存，方便刷新页面后保持登录状态
    uni.setStorageSync("token", token.value);
    uni.setStorageSync("userInfo", JSON.stringify(userInfo.value));
  }

  /**
   * 清除登录状态
   */
  function clearLoginState() {
    token.value = null;
    userInfo.value = null;
    uni.removeStorageSync("token");
    uni.removeStorageSync("userInfo");
  }

  /**
   * 登录 Action
   * @param {Object} payload - 登录请求参数
   * payload.userAccount: 用户账号
   * payload.password: 用户密码（可选）
   * payload.captchaId: 验证码 ID
   * payload.captcha: 用户输入的验证码
   */
  const login = async (payload) => {
    try {
      // 调用 AuthAPI 登录接口
      const response = await AuthAPI.login(
        payload.userAccount,
        payload.password || "",
        payload.captchaId,
        payload.captcha,
      );
      // 登录成功，设置状态
      setLoginState(response);
    } catch (error) {
      console.error("登录 Action 失败:", error);
      // 登录失败，清除状态
      clearLoginState();
      throw error;
    }
  };

  /**
   * 退出登录
   */
  const logout = () => {
    clearLoginState();
    // 退出登录后跳转到登录页
    uni.reLaunch({ url: "/pages/login/index" });
  };

  // 返回状态和方法，供组件使用
  return {
    token,
    userInfo,
    isLoggedIn,
    login,
    logout,
    setLoginState,
  };
});
